import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class UdpEchoClient {
    // 定义一个DatagramSocket对象
    private DatagramSocket socket = null;
    // 定义服务器IP地址
    private String serverIp;
    // 定义服务器端口号
    private int serverPort;

    // 构造函数，初始化服务器IP地址和端口号，并创建DatagramSocket对象
    public UdpEchoClient(String serverIp, int serverPort) throws SocketException {
        this.serverIp = serverIp;
        this.serverPort = serverPort;
        socket = new DatagramSocket();
    }

    // 开始发送和接收数据
    public void start() throws IOException {
        try (Scanner in = new Scanner(System.in)) {
            while (true) {
                // 提示用户输入要发送的内容
                System.out.println("请输入要发送的内容：");
                // 如果用户输入为空，则退出循环
                if (!in.hasNext()) {
                    break;
                }
                // 获取用户输入的内容
                String request = in.nextLine();
                // 将用户输入的内容转换为字节数组，并创建DatagramPacket对象
                DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,
                        InetAddress.getByName(serverIp), serverPort);
                // 发送DatagramPacket对象
                socket.send(requestPacket);
                // 创建一个空的DatagramPacket对象，用于接收服务器返回的数据
                DatagramPacket responsePacket = new DatagramPacket(new byte[1024], 1024);
                // 接收服务器返回的数据
                socket.receive(responsePacket);
                // 将接收到的数据转换为字符串
                String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
                // 输出服务器返回的数据
                System.out.println(response);
            }
        }
    }

    // 主函数，创建UdpEchoClient对象，并调用start方法
    public static void main(String[] args) throws IOException {
        UdpEchoClient client = new UdpEchoClient("127.0.0.1", 7788);
        client.start();
    }
}
